home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 3 / Gold Medal Software - Volume 3 (Gold Medal) (1994).iso / bbsutils / ulp107b.arj / ULP.DOC < prev    next >
Text File  |  1994-04-24  |  98KB  |  1,779 lines

  1.  
  2.     ┌───────────────────┐
  3.     │                   │ ║                UpLoadProcessor
  4.     │    ╥   ╥ ╥        │ ║
  5.     │    ║   ║ ║ ╓──╖   │ ║                 Version 1.07b
  6.     │    ║   ║ ║ ║  ║   │ ║
  7.     │    ╙───╜ ╨ ║──╜   │ ║     (c) Copyright 1992-1994 - Stacy Smith
  8.     │            ╨      │ ║
  9.     └───────────────────┘ ║
  10.       ════════════════════╝
  11.  
  12.                                 Courtesy of:
  13.  
  14.                         The Bloom Beacon-Picayune BBS
  15.           Node 1: (919) 557-3845 (USRobotics Courier Dual Standard)
  16.              Node 2: (919) 557-0645 (USRobotics Courier V.32bis)
  17.              Node 3: (919) 557-0745 (USRobotics Courier V.32bis)
  18.                              FidoNet 1:151/106
  19.                                   Intelec
  20.                                  CompuLink
  21.  
  22.                                 Stacy Smith
  23.                             305 Cottonwood Lane
  24.                           Holly Springs, NC 27540
  25.  
  26.  
  27. ┌───────────────────┐
  28. │  1. Introduction  │
  29. └───────────────────┘
  30.  
  31. This system was born out of a need for a universal upload processor. There are
  32. many alternative systems available, but they are limited to the ZIP format and
  33. perhaps one or two others. Few are able to handle self-extracting archives.
  34. Most are limited in the number of levels of archive nesting allowed in a file
  35. to be tested. All require the use of a third-party duplicate file checking
  36. system if you want to screen your uploads for duplicates.
  37.  
  38. Tired of waiting for PKZIP 2.something-or-another, I converted my BBS files
  39. over to the ARJ compression format, due to its superior compression ratio over
  40. PKZip and its features over LHA (I have since switched back to ZIP...the
  41. undertow was overwhelming <g>).  But due to that decision, the need for a
  42. universal upload processor became apparent, so off I went.
  43.  
  44. While I was at it, I decided to incorporate other technologies, such as
  45. duplicate checking, archive format conversion, information lines, support for
  46. internal description files, etc., into a single package. This software is the
  47. result of my efforts to allow my BBS to handle any archive that my users can
  48. throw at it.
  49.  
  50.  
  51. ┌─────────────────────────────────────────────┐
  52. │  2. Features of the UpLoadProcessor System  │
  53. └─────────────────────────────────────────────┘
  54.  
  55.   ∙ Identifies and processes ARC, ARJ, HYP, LZH, PAK, SQZ, ZIP, ZOO and GIF
  56.     files, regardless of their file extensions (ideal for software distribution
  57.     network files, e.g. SDN).
  58.   ∙ Identifies and processes ARJ, LZH, PAK, SQZ and ZIP self-extracting (SFX)
  59.     archives.
  60.   ∙ Scans ARC, PAK, ZIP and ZIP SFX archives for DOS reserved keywords to
  61.     prevent hacking by hex-editing. (ARJ and LHA are resistant to these type of
  62.     hacking attempts).
  63.   ∙ Detects ARJ security envelopes and ZIP version 1.x and 2.x authenticity
  64.     verification (-AV) stamps and may be retained intact.
  65.   ∙ Detects and processes ARJ and ZIP archives with imbedded paths.
  66.   ∙ Detects and rejects encrypted ARJ and ZIP archives.
  67.   ∙ Selected uncompressed files uploaded can be processed and compressed using
  68.     your default format.
  69.   ∙ Removes known BBS ads from archives; includes a BBS ads maintenance utility
  70.     so sysops can update their BBS ads databases in real time. ULP can also
  71.     insert a BBS ad, if desired.
  72.   ∙ Updates the PCBoard DOWNLOAD.TXT file, if desired, with the correct archive
  73.     extension to reflect the conversion process.
  74.   ∙ Allows the use of up to 9 different archiving programs, all user-
  75.     configurable. Any archiving program used that is not listed above will be
  76.     identified using it's unique file extension only, until it's signature is
  77.     determined and incorporated into the program.
  78.   ∙ Uses a recursive processing routine that will allow (theoretically)
  79.     unlimited nested archives (the only limit is imposed by the DOS path). This
  80.     routine has been tested to 5 levels deep as of this writing.
  81.   ∙ Allows the use of up to 3 different file-checking programs, all user-
  82.     configurable, for virus and trojan checking, third-party utilities, etc.
  83.   ∙ Allows the use of a GIF file checking program, completely configurable.
  84.   ∙ Rejects GIF files based upon image width, height, colors and compression.
  85.   ∙ User-definable disposition (rename or delete) of corrupted, duplicate or
  86.     other archives (not virus-related).
  87.   ∙ User-definable disposition (rename or delete) of virus-infected archives.
  88.   ∙ Incorporates it's own duplicate checking system, as well as the associated
  89.     database processing software. No more executing (and registering!)
  90.     third-party duplication checking software, sacrificing speed and memory.
  91.     This system is extremely fast and it's database is much smaller than other
  92.     systems. Despite it's size, the probability of a false duplication is
  93.     almost 1 in 10 trillion! The system is self-validating, to quickly
  94.     determine if a database has been corrupted or altered.
  95.   ∙ Optional seamless interface with the ZDCS duplication system by Mike Cocke.
  96.   ∙ ULP determines duplication using two filters, total duplication and
  97.     executable duplication, preventing false rejection by simply counting up
  98.     the number of blatantly duplicate files.
  99.   ∙ Converts all uploads into a default archive format of your choosing, or
  100.     they may be re-archived in their original format (user-defined). Nested
  101.     archives can also be converted to your default format, or re-archived using
  102.     their original format. SFX archives can be archived using your default
  103.     format, or optionally left alone after verification.
  104.   ∙ Can utilize a user-defined time window (in months) for acceptance of new
  105.     upload files, based on the average age of the files within the archive, or
  106.     optionally, the age of the newest file.
  107.   ∙ Changes all archive file attributes to 'read/write' from 'read-only'.
  108.   ∙ Supports the use of private and public upload directories. Moves files and
  109.     upload descriptions from the private directory to the public directory.
  110.     Single directory operation may also be configured.
  111.   ∙ Honors the '/' identifier in the description marking the file as a private
  112.     upload for the sysop by processing the file, but not making it public.
  113.   ∙ Supports the use of DESC.SDI and FILE-ID.DIZ description files in an
  114.     archive, user-configurable, for those not running PCBoard 14.5a+ and
  115.     PCBDESC.
  116.   ∙ Smart word-wrapping word-wraps descriptions or leaves them as entered,
  117.     depending upon the presence of boxes, etc.
  118.   ∙ Can optionally insert an archive or GIF information line in the file
  119.     description that contains various information about the archive or GIF
  120.     files.
  121.   ∙ Three modes of online testing are available: slow mode, which completely
  122.     processes files at the time of upload; normal mode, which fully unpacks the
  123.     archive and tests each file individually; and fast mode, which scans a ZIP
  124.     or ARJ archive directly for file CRCs, sizes and dates, and uses the
  125.     archiving program's internal integrity testing.
  126.   ∙ The online tester will accept a redirected ARJ or PKUNZIP archive listing
  127.     file to pre-verify the duplication and age limits before a user uploads the
  128.     actual archive, saving him or her wailing and gnashing of teeth.
  129.   ∙ ULPTEST can generate COM port status output to inform the online user of
  130.     the progress of testing. ULPTEST supports IRQs 2 through 7, non-standard
  131.     port addresses and baud rates to 115K in direct mode, and also supports
  132.     FOSSIL drivers. The port information can be defined on the command-line or
  133.     can be read directly from PCBOARD.DAT and PCBOARD.SYS. ULP can also be
  134.     implemented in a "seamless" mode (when registered) to look like a part of
  135.     PCBoard.
  136.   ∙ Import of FWKCS(TM) contents_signature databases is supported to ease
  137.     transition to the ULP duplication system. No need to rebuild databases for
  138.     FWKCS users!
  139.   ∙ Archives failed for exceeding duplication limits can be viewed using ULPDB
  140.     (the database program), to allow easy determination of manual archive
  141.     acceptance.
  142.   ∙ User-selectable process logging to a disk file. Two logging modes are
  143.     available: terse and verbose.
  144.   ∙ Menu-driven windowed system manager for maximum ease of configuration.
  145.   ∙ Written mostly in C (and a little assembler) for optimal speed, using
  146.     Microsoft C 7.0, Borland C++ 3.1 and Turbo Assembler 3.0.
  147.  
  148.  
  149. ┌─────────────────────────────────────────────────────┐
  150. │  3. Files Included in the ULP Distribution Archive  │
  151. └─────────────────────────────────────────────────────┘
  152.  
  153.     ULP.EXE         Event upload processing program.
  154.     ULPTEST.EXE     On-line testing program for use in PCBTEST.BAT.
  155.     ULPDB.EXE       Duplication database creation and maintenance program.
  156.     ULPSM.EXE       System and configuration manager for the ULP system.
  157.     ULPADS.EXE      BBS ads database maintenance program.
  158.     ULPADS.DB       BBS ads database file.
  159.     SAMPLE.CFG      Sample configuration file for the ULP system.
  160.     SAMPLE.DIR      Sample directory configuration file.
  161.     UPDATE.EXE      Configuration file conversion utility (only if necessary).
  162.     EXCLUDE.LST     Sample exclusion list for archivers.
  163.     PCBTEST.BAT     Sample PCBTEST.BAT file for using ULPTEST.
  164.     ULP.DOC         This file.
  165.     Q&A.DOC         Answers to common questions regarding the ULP system.
  166.     HISTORY.TXT     ULP revision history in reverse order.
  167.     UPGRADE.TXT     Information specific to upgrading from previous versions.
  168.     ULPBLT          Archive verification bulletin for sysops to post.
  169.     REGISTER.FRM    Registration form for ULP.
  170.     COMMENT.TXT     Sample comment file for inclusion in archive headers.
  171.     FILE_ID.DIZ     Internal description file.
  172.  
  173. When you unzip the distribution archive, you should see my PKZIP authenticity
  174. verification stamp, and a '-AV' after every file in the archive:
  175.  
  176.     # SSU301    The Bloom Beacon-Picayune BBS
  177.  
  178. If there are any files missing or added, or the -AV stamp is missing, the
  179. archive has been tampered with. It would be advisable to call my BBS (listed at
  180. the top of this document) for the latest version of ULP.
  181.  
  182.  
  183. ┌───────────────────────────┐
  184. │  4. Program Requirements  │
  185. └───────────────────────────┘
  186.  
  187. To the best of my knowledge, this program will run on most any machine capable
  188. of running PCBoard 14.5+. My BBS setup is DESQview on a LANtastic network with
  189. hard disks and CD-ROMs, but other sysops that I have been in contact with have
  190. successfully implemented ULP on setups other varying hardware and software.
  191.  
  192. ULP has been developed and tested using the following third party utilities:
  193.  
  194.     ARJ 2.10 and higher (by Robert Jung)
  195.     HYPER 2.5 (by P. Sawatzki and K. P. Nischke)
  196.     LHA 2.12 and higher (by Haruyasu Yoshizaki)
  197.     LHarc 1.13c (by Haruyasu Yoshizaki)
  198.     PAK 2.51 (by NoGate Consulting)
  199.     PKPAK 3.61 (by PKWare)
  200.     PKZIP 1.10 and higher (by PKWare)
  201.     SQZ 1.08.2 (by Jonas Hammarberg)
  202.     ZOO 2.01 and higher (by Rahul Deshi)
  203.     AntiAd 0.98ß and higher (by Stacy Smith)
  204.     F-PROT 2.07 and higher (by Frisk Software International)
  205.     SCAN V82 and higher (by McAfee Associates)
  206.     GIFTEST 4.0 Beta 10 and higher (by Dave Navarro)
  207.     ZDCS 2.02 and higher (by Stacy Smith)
  208.     SHROOM 2.3a (by Davis Augustine)
  209.  
  210. The ULP system requires DOS 3.x or later, as it uses DOS SHARE-compatible file
  211. reads and writes, and can use the DOS PATH to find the archiving and other
  212. utilities.
  213.  
  214. ULP and ULPTEST's memory requirements are relatively small (about 110K or so
  215. with data buffers allocated), but all programs are spawned or shelled, which
  216. reduces the free memory for the program being executed. It would be a good idea
  217. to have as much free conventional memory as possible (ULP itself cannot use EMS
  218. or XMS memory), especially if you use the ARJ compression system, which
  219. requires in the neighborhood of 300K itself to run.
  220.  
  221. ULPDB also should have as much conventional memory as can be afforded, as it
  222. performs its sort in memory for optimal speed; it may use from 120K to 575K of
  223. memory depending upon the operation being performed. If your duplication
  224. database is larger than 500K (over 50,000 file entries), ULPDB may utilize a
  225. segmented sort algorithm, which is slower but capable of completely compiling a
  226. database up to 128MB in size (almost 13,000,000 file entries)! The memory sort
  227. will probably be fine for many systems, as 50,000 files would probably average
  228. out to be about 4,000 to 5,000 typical archives.
  229.  
  230. Obviously, the 286+ and 386+ versions of these programs that is available to
  231. registered users will not run on a 8088, 8086 or 80186 (huh?) based computer.
  232. So don't try it (I haven't, so I don't have a clue what will happen...probably
  233. spontaneous combustion...).
  234.  
  235.  
  236. ┌───────────────────┐
  237. │  5. Registration  │
  238. └───────────────────┘
  239.  
  240. The ULP system is not free; nor is ULP is crippled to force registration.  ULP
  241. is fully functional, and will always remain so.  The primary difference is no
  242. time delay and beg message once registered.
  243.  
  244. Why register? Besides a clean conscience, you will get a diskette including the
  245. latest version of ULP and a registration key that will work for all future
  246. versions of ULP, and will remove the delay and message at the end of execution
  247. of each program.  In addition, registration will allow you to run ULPTEST in a
  248. "seamless" mode so that it looks like a part of PCBoard to the user.
  249.  
  250. In addition, the registation key will allow use of the 286 or 386 specific
  251. versions of ULP that are made available to registered users of ULP.  These
  252. versions are slightly smaller and faster than the shareware 086+ version.
  253.  
  254. The registration fee for ULP is $25 for hobbyist BBSes.  The registration fee
  255. for commercial BBSes, defined as running your BBS in the course of a commercial
  256. business or for profit, is $40.  Please print the file REGISTER.FRM and fill it
  257. out.  You can print out the form by issuing the following command from the DOS
  258. prompt:
  259.  
  260.     TYPE REGISTER.FRM > PRN
  261.  
  262.  
  263. ┌───────────────────────────────────────┐
  264. │  6. License, Warranty and Disclaimer  │
  265. └───────────────────────────────────────┘
  266.  
  267. I'll keep this part short and sweet, and dispense with the legal-ese:
  268.  
  269.     License: You are allowed to use ULP for 30 days, after which you must
  270.         either register ULP or stop using it completely. ULP registration is a
  271.         license for your use of ULP; I retain ownership of the software. A
  272.         single registration applies to a single BBS system, regardless of the
  273.         number of computers used in the system. If you run two or more distinct
  274.         BBS systems on the same computer or network (with different names), you
  275.         require two or more ULP registrations. Refer to the registration form
  276.         for the currect pricing structure.
  277.  
  278.     Warranty: There isn't one. The only thing I'll guarantee is that ULP will
  279.         take up disk space, and will disappear when deleted.
  280.  
  281.     Disclaimer: I'm not responsible for anything bad that happens. ULP works
  282.         here, but I cannot be held responsible for it not working on your
  283.         computer or doing any damage to hardware or software.
  284.  
  285. If these aren't agreeable with you, then the best thing to do is delete ULP
  286. right now. I'll do my best to help any user (registered or not) that wants to
  287. use ULP, and I'll act on bug reports quickly, but I simply cannot and will not
  288. be responsible for anything bad, like lost data, disk crashes, or whatever
  289. else you can think of.
  290.  
  291.  
  292. ┌────────────────────────────┐
  293. │  7. Conceptual Background  │
  294. └────────────────────────────┘
  295.  
  296. Since the ULP system is made up of several inter-operating programs, this
  297. overview and concept explanation should help you understand how ULP is
  298. designed to be used.
  299.  
  300. *******************************************************************************
  301.      READ THIS SECTION VERY CAREFULLY, AS IT WILL MAKE LIFE MUCH EASIER!!!
  302. *******************************************************************************
  303.  
  304. I believe that all responsible BBS sysops verify all of their uploads prior to
  305. posting them, in order to protect both themselves and their users. ULP is
  306. designed with idea in mind. Most, if not all, sysops process uploads in one of
  307. two ways (listed with benefits and liabilities as I see them):
  308.  
  309.     1) Make all uploads private, processing them during a system event.
  310.  
  311.        BENEFITS:
  312.            ∙ Takes up very little on-line time on the user's part to process
  313.              archives.
  314.            ∙ Allows the conversion of all archives to a default format, so that
  315.              the BBS archives are consistent.
  316.            ∙ Allows the BBS to accept any archive format...face it, it's hard
  317.              enough to get some of these weenies to upload, much less compress
  318.              them the same way.
  319.  
  320.        LIABILITIES:
  321.            ∙ Files are not available immediately for download.
  322.            ∙ The 'U' subcommand of PCBoard's (F)ile Directories command is no
  323.              longer available to the user (PCBoard 14.5a and below).
  324.            ∙ Does not catch duplicates or aged archives until after the user
  325.              has uploaded them, and perhaps leads to abuse by clever (?) users.
  326.              (It is assumed that these sysops still use the venerable 'PKUNZIP
  327.              -T' in their PCBTEST.BAT...)
  328.  
  329.     2) Process (test) each upload online after the user uploads them, and
  330.        making them available for immediate download.
  331.  
  332.        BENEFITS:
  333.            ∙ Catches duplicate, defective and aged archives while the user is
  334.              online, denying him upload credits.
  335.            ∙ Files are available immediately for download if they are not made
  336.              private in the PCBoard setup.
  337.  
  338.        LIABILITIES:
  339.            ∙ Takes up on-line time for a user, potentially adding to his
  340.              long-distance phone bill, discouraging further uploading; this
  341.              process is typically quite slow for large archives.
  342.            ∙ The archive format cannot be converted (a limitation of PCBoard),
  343.              leaving many different archive formats in your BBS directories.
  344.              Because of this, many sysops force users to use a specific format,
  345.              which may or may not be consistent with other BBS's the user
  346.              calls.
  347.  
  348. The ULP system takes the best of both of these methods of testing. ULP.EXE is
  349. an event-mode processor which will fully process every new archive found in the
  350. source upload directory, including archive format conversion, and optionally
  351. move the file and description to a destination directory. In the simplest
  352. ULP system setup, you MUST run ULP.EXE in your event to completely process all
  353. uploads to your system.
  354.  
  355. ULPTEST.EXE is an online processor, with a varying modes of operation, from
  356. complete processing to a very fast scan of the archive directly for data. These
  357. modes will allow you to run your BBS in the most efficient manner. Note that
  358. the conversion process MUST be handled by ULP during the system event, due to
  359. the design of PCBoard.
  360.  
  361. Pay attention to this part:
  362.  
  363. PCBoard normally has two upload directories for each conference: a private and
  364. a public directory. When PCBoard invokes PCBTEST.BAT, the upload is in the
  365. private directory. If the archive fails the testing, it will remain there.
  366. However, if it passes, one of two things will occur depending upon your system
  367. setup; if you have made all uploads private, the file will remain in the
  368. private directory; if you have not made uploads private, it will be moved BY
  369. PCBOARD (not ULPTEST) to the public directory.
  370.  
  371. If you have made all uploads private, then setup and configuration of ULP is a
  372. snap: the source directory is the private upload directory, and the destination
  373. is the public directory. However, if you want to allow users access to untested
  374. uploads, then your source directory is the public upload directory, and the
  375. destination information is left blank. To illustrate the operation:
  376.  
  377.   MAKE ALL UPLOADS PRIVATE           │  ALL UPLOADS AVAILABLE AFTER TESTING
  378.   ───────────────────────────────────┼─────────────────────────────────────
  379.   2 directories:  C:\PRIVATE         │  2 directories:  C:\PRIVATE
  380.                   C:\PUBLIC          │                  C:\PUBLIC
  381.                                      │
  382.   User uploads a file, gets placed   │  User uploads a file, gets placed
  383.   in C:\PRIVATE by PCBoard           │  in C:\PRIVATE by PCBoard
  384.                                      │
  385.   ULPTEST.EXE tests it               │  ULPTEST.EXE tests it
  386.                                      │
  387.   PCBoard leaves file in C:\PRIVATE  │  If it passes, PCBoard moves it to
  388.                                      │  C:\PUBLIC; if it fails, PCBoard
  389.                                      │  leaves it in C:\PRIVATE
  390.                                      │
  391.   ULP.EXE processes all new uploads  │  ULP.EXE processes all *new* uploads
  392.   found in C:\PRIVATE since last     │  found in C:\PUBLIC since last event
  393.   event and moves all good uploads   │
  394.   to C:\PUBLIC                       │
  395.  
  396. ULPTEST.EXE also has three modes of operation: slow, normal and fast. Slow mode
  397. completely tests the upload as in the event, except for archive conversion.
  398. Note that you MUST use the "all uploads public" mode of operation to run slow
  399. mode.
  400.  
  401. The normal mode decompresses the files, performs file, duplication and age
  402. checking, and then deletes the extracted files and returns to PCBoard,
  403. informing PCBoard of the test results. It does not recompress the archive,
  404. remove BBS ads, add information lines, etc.; this is saved for the event
  405. processing. This mode can be used with both setup paradigms, making all uploads
  406. private or public.
  407.  
  408. Fast mode DOES NOT decompress the file; it firsts performs an archive integrity
  409. check, then scans ARJ and ZIP archives directly for duplicate and age
  410. information, and then returns to PCBoard (if the archive is not ARJ or ZIP,
  411. then normal mode is forced). In fast mode, file checking (viruses, etc.) is
  412. left for ULP to do (which is why the above discussion regarding private/public
  413. directories is important). This mode can also be used either in making uploads
  414. public or private, although it would be a good idea to make them private with
  415. this mode, since the uploads are not file-checked (e.g. viruses) during
  416. test.
  417.  
  418. ULPTEST.EXE will also accept a redirected ARJ or PKUNZIP listing text file with
  419. the special name VERIFY.ULP as input to pre-verify an upload for a user, before
  420. the user actually spends his time uploading the file only to find out it won't
  421. pass the limits you set.
  422.  
  423.  
  424. ┌───────────────────┐
  425. │  8. Installation  │
  426. └───────────────────┘
  427.  
  428. GENERAL (REQUIRED!):
  429. ───────────────────
  430. Make a subdirectory on your hard drive. For the purposes of this document,
  431. we'll call it "C:\ULP". Unarchive the ULP distribution archive into this
  432. subdirectory. You've more than likely already made it this far, if you're
  433. reading this file. <g>
  434.  
  435. The ULP system opens several files at once for various reasons. I would
  436. recommend that you have a minimum of FILES=30 per node in your system
  437. CONFIG.SYS file, since ULPTEST is run in conjunction with PCBoard.
  438.  
  439. If you are running PCBoard under a network or a multitasking operating system,
  440. you should already have DOS's SHARE.EXE loaded. You must have SHARE loaded in
  441. order to take advantage of the file sharing and locking methods used by the ULP
  442. programs to prevent data loss. (If you are running a single-node system without
  443. a multitasker, SHARE is not needed).
  444.  
  445. * NOTE: DOS 5 has a documented bug when SHARE is loaded high, where it loses
  446.     the table in memory. Please load SHARE low to prevent potential sharing
  447.     problems.
  448.  
  449. Using ULPSM, configure the ULP system to suit your needs. Proper configuration
  450. will require you to refer to this section, the previous section and the section
  451. titled "Configuration", which has an in-depth explanation of each configuration
  452. option and its function. It would probably be wise to fire up your printer for
  453. this document.
  454.  
  455. For this document, we'll assume the name of your configuration file is
  456. "ULP.CFG".
  457.  
  458. Note that for any of the ULP programs, you can obtain a limited program syntax
  459. screen simply by executing the program with no arguments.
  460.  
  461. FOR EVENT-MODE UPLOAD PROCESSING (REQUIRED!):
  462. ────────────────────────────────────────────
  463. As a minimum setup, you MUST run ULP as an event-mode processor, as ULP.EXE
  464. handles most of the database updating, archive conversion, file and description
  465. moving, archive information line computation, and other features. THIS IS NOT
  466. AN OPTION!!!
  467.  
  468. Further, ULP requires that you define the upload disk directories and upload
  469. DIRxx files. They can be either a private/public setup or public setup, as
  470. described below (and in the 'principles of operation' section):
  471.  
  472.   - PRIVATE/PUBLIC SETUP:  This setup will not allow users to get to any
  473.     archive that has not been fully processed. In PCBSETUP, under Main Board
  474.     Configuration (and any other conferences you want ULP to process), make all
  475.     uploads private. Define a private upload directory and a private DIRxx file
  476.     (which should have already been done, since all sysop-only uploads are
  477.     placed here by PCBoard). In PCBSETUP, be sure to set the "make all uploads
  478.     private" flag to "Y". This is how I have my system setup.
  479.  
  480.   - PUBLIC SETUP:  This setup will allow users to download archives from the
  481.     public upload directory, including partially testing archives. In PCBSETUP,
  482.     under Main Board Configuration (and any other conferences you want ULP to
  483.     process), define a private upload directory and a private DIRxx file, and a
  484.     public upload directory and a public DIRxx file (this is where PCBoard will
  485.     place all new non-private uploads since you did not make them private). Be
  486.     sure to set the "make all uploads private" flag to "N".
  487.  
  488. To process your uploads during your system event, add the following lines to
  489. your EVENT.SYS file (be sure to change the drive and path as necessary):
  490.  
  491.     C:
  492.     CD \ULP
  493.     ULP -CULP.CFG
  494.  
  495. ULP will lock the duplication database, preventing any other program from
  496. accessing them (ULPTEST and ULPDB, specifically). Therefore, I strongly suggest
  497. you have all nodes down when running ULP.EXE, or at least disable uploading
  498. during this time.
  499.  
  500. Once you have ULP configured, before you run ULP for the first time, the
  501. process data file must be initialized (either via ULPSM or using ULP.EXE's -I
  502. parameter). The syntax for ULP.EXE is as follows, but please refer to the
  503. manual operation section below for more information:
  504.  
  505.     ULP -CULP.CFG -I
  506.  
  507. This is only done ONCE, and never needs to be done again; ULP maintains this
  508. file as a course of action during normal operation.
  509.  
  510. FOR THE INTEGRATED DUPLICATION SYSTEM (HIGHLY RECOMMENDED):
  511. ───────────────────────────────────────────────────────────
  512. Initially, you must create the duplication database from scratch. If you have
  513. mostly ZIP and ARJ files, then this should be very quick (on the order of 10
  514. minutes per 1000 archives for my 10MHz AT clone on a hard disk; a CD-ROM will
  515. be somewhat slower). After you configure ULP, go to the ULP directory and this
  516. command will create and compile your database of your current downloadable file
  517. base:
  518.  
  519.     ULPDB -CULP.CFG -A@C:\PCB\GEN\DLPATH.LST -S
  520.  
  521. The '@' symbol (a '!' may also be used) indicates to ULPDB that the argument is
  522. a list file, not a directory. The list file must have one path per line, and
  523. each path must end with a trailing backslash. In general, you may simply use
  524. your PCBoard DLPATH.LST file, unless you index your downloads.
  525.  
  526. If you would like to include any off-line files in your duplication database
  527. (or have to add files originally not included in the database) you can
  528. temporarily copy your offline files to a temp directory (for the sake of
  529. argumentation, let's call it "C:\TEMP\"; note the trailing backslash). You can
  530. then add and compile them into the duplication database with the following
  531. command (no list symbol!):
  532.  
  533.     ULPDB -CULP.CFG -AC:\TEMP\ -S
  534.  
  535. After you've added the offline files, just delete them from the disk, and if
  536. someone uploads a file that you already have, it will be rejected.
  537.  
  538. * NOTE: The default method of database generation will be the fastest mode
  539.     since ULPDB will scan ARJ and ZIP archives for data without unpacking. This
  540.     is not as accurate as recursively unpacking the archives since ULPDB can
  541.     only 'see' one level deep into an archive; nested information will not be
  542.     obtained. If this poses a problem, add the -U parameter to the end of the
  543.     command lines above; this will force ULPDB to unpack all archives and
  544.     compute the CRCs. This will be significantly slower than the default
  545.     method, but 100% accurate.
  546.  
  547. If you already have a FWKCS duplication database, you can import and translate
  548. it into the ULP database by using the -I command line parameter. ULPDB will
  549. prompt you for which database format it is, and will then proceed to import it
  550. into the ULP database defined in ULP.CFG:
  551.  
  552.     ULPDB -CULP.CFG -IC:\FWKCS\CSLIST -S
  553.  
  554. Once you have your database built, you should also perform maintenance on the
  555. duplication database files regularly. This will compile any new data from the
  556. day's uploads into the main database, and remove any added temporary data from
  557. ULPTEST. This is not required to be done every day, but it will speed the
  558. duplicate checking of ULP and ULPTEST. To perform database maintenance, add the
  559. following line to your PCBoard EVENT.SYS after the event-mode processor has
  560. run:
  561.  
  562.     C:                    ──────┐        These lines are repeated
  563.     CD \ULP                     ├─────   for clarity.
  564.     ULP -CULP.CFG         ──────┘
  565.     ULPDB -CULP.CFG -S
  566.  
  567. ULPDB also locks the duplication database, preventing any other program from
  568. accessing them. I strongly suggest you have all nodes down when running ULPDB.
  569.  
  570. IF YOU USE PCBOARD'S 'TESTFILE.EXE' UTILITY:
  571. ────────────────────────────────────────────
  572. * NOTE: If you are unfamiliar with the operation of PCBTEST.BAT, you will need
  573.     to refer to the PCBoard manual for an explanation of PCBTEST.BAT and
  574.     TESTFILE.EXE.
  575.  
  576. In general, the use of TESTFILE.EXE is not necessary with ULPTEST. ULPTEST is
  577. fully capable of handling most any situation that arises. However, if you must
  578. use TESTFILE.EXE for some reason, in order to take advantage of the upload
  579. pre-verification abilities of ULPTEST, you must add the extension 'ULP' to the
  580. TESTFILE.EXE extension list. This will allow the file 'VERIFY.ULP' to pass
  581. through the filter created by TESTFILE so that ULPTEST may scan it. You will
  582. also have to add 'EXE' to your extension list if you use TESTFILE.EXE, to allow
  583. SFX archives to be processed by ULPTEST.
  584.  
  585. FOR THE ONLINE UPLOAD TESTING (OPTIONAL):
  586. ─────────────────────────────────────────
  587. Online testing of archives can greatly reduce the amount of garbage your BBS
  588. can pick up from user's uploading defective archives, ancient files, and
  589. duplicates. The theory that ULPTEST uses is to simply check the archive AS
  590. FAST AS IT CAN for archive integrity, duplication, and age, and then return
  591. the user to greater and better things. ULP.EXE will handle everything else
  592. during the system event.
  593.  
  594. * NOTE: In order to use ULPTEST, you must set PCBoard to swap by adding the
  595.     /SWAP switch to the SET PCB= environment variable in BOARD.BAT (in PCBoard
  596.     15.0, this is in PCBSETUP, not the environment variable). Otherwise, there
  597.     will not be enough memory for ULPTEST to execute programs like ARJ, SCAN,
  598.     etc.
  599.  
  600. To use ULPTEST.EXE for on-line testing of archives, use the following command
  601. line in PCBTEST.BAT (refer to the sample PCBTEST.BAT included in the ULP
  602. distribution archive, and the PCBoard manual, to get the general logic of
  603. PCBTEST.BAT's operation). Note the explicit paths to the ULPTEST executable and
  604. the ULP configuration file:
  605.  
  606.     C:\ULP\ULPTEST -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3
  607.  
  608. ULPTEST will garner any other information that is required for operation from
  609. the PCBOARD.DAT and PCBOARD.SYS files. In most installations, ULPTEST will
  610. locate these two system files via the environment variables PCBDAT, PCBDRIVE
  611. and PCBDIR. If the environment variables are used, PCBDIR and PCBDAT are
  612. required; PCBDRIVE is required only if the BBS drop files exist on a different
  613. drive than PCBTEST.BAT is being executed from.
  614.  
  615. * NOTE: Don't rely on PCBoard to create these variables; it only does so prior
  616.     to executing a door. As a last resort, ULPTEST will look in the current
  617.     directory for the files it requires.
  618.  
  619. If you have the environment variables disabled in PCBoard (using the /NOENV
  620. switch), you can define the location of these files by adding the -P parameter:
  621.  
  622.     C:\ULP\ULPTEST -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -PC:\PCB\NODE1\
  623.  
  624. Or, or you can provide the port and node number information directly to ULPTEST
  625. by using the -N, -I, -A and -B command switches:
  626.  
  627.     C:\ULP\ULPTEST -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -N5 -I4 -A3F8 -B38400
  628.  
  629. where -N is the node number, -I is the port IRQ line, -A is the port base
  630. address (in hex) and -B is the baud rate of the port. If you are using the
  631. DSZPORT environment variable to define the port IRQ and address to DSZ, ULPTEST
  632. will use this information as well. Refer to the documentation for DSZ for the
  633. proper specification of the DSZPORT environment variable.
  634.  
  635. In addition, regardless of the method used to inform ULPTEST of the port
  636. information, ULPTEST defaults to using hardware handshaking. If you want to use
  637. software (XON/XOFF) handshaking or both, use the -H command switch with either
  638. HARDWARE, SOFTWARE or BOTH as the argument:
  639.  
  640.     C:\ULP\ULPTEST -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -Hboth
  641.  
  642. ULPTEST is also capable of using a FOSSIL driver, and automatically detects if
  643. you are running PCBoard /M and uses the appropriate FOSSIL port. However, if
  644. you wish to force ULPTEST to use a FOSSIL driver (for example, to access high
  645. IRQs), use the -X command switch with the FOSSIL port number as the argument:
  646.  
  647.     C:\ULP\ULPTEST -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -X1
  648.  
  649. During the course of testing, ULPTEST will output the current testing status to
  650. the user online. Note that this information is not displayed locally; it is
  651. being transmitted to the online user only. The program header can be disabled
  652. in registered versions of ULP, making ULPTEST seamless to look like a part of
  653. PCBoard itself. A sample follows:
  654.  
  655.     Verifying FILENAME.ZIP...
  656.     ┌────────────────────────────────┐
  657.     │      UpLoadProcessor 1.00      │  Registered to: Bloom Beacon-Picayune
  658.     │ Copyright 1992-93  Stacy Smith │  Serial number: 1000
  659.     └────────────────────────────────┘
  660.        Identifying file archive format...ZIP
  661.        Screening archive for corruption...OK
  662.        Unpacking archive...OK
  663.        Testing files for viruses, etc...OK
  664.        Checking for duplicate files...OK
  665.        Checking age of files...OK
  666.        Archive passed.
  667.  
  668. ULPTEST will return a DOS errorlevel of 0 if the archive is OK, and an
  669. errorlevel of 1-13 if there was an error (depending on the error). This allows
  670. the PCBTEST.BAT batch file to branch based upon the results of the ULPTEST. The
  671. appendix to this document lists all of the DOS errorlevels set by various ULP
  672. programs.
  673.  
  674. ULPTEST also creates the requires PCBPASS.TXT and PCBFAIL.TXT for PCBoard to
  675. determine if the archive passed or not.
  676.  
  677.  
  678. ┌────────────────────┐
  679. │  9. Configuration  │
  680. └────────────────────┘
  681.  
  682. ULPSM makes the configuration process very easy for the ULP system. The sample
  683. configuration files provided in the distribution archive contain much of the
  684. information required, but needs to be customized to some degree to fit your
  685. application.
  686.  
  687. To begin ULPSM, you must include a configuration filename on the command-line,
  688. denoted by the -C switch. For example, to edit the default configuration file,
  689. ULP.CFG, type:
  690.  
  691.     ULPSM -CULP.CFG
  692.  
  693. and the main menu screen will appear:
  694.  
  695. ┌───────────────────────────────┐┌─────────────── Registered To ──────────────┐
  696. │   ULP System Manager 1.00     ││                UNREGISTERED                │
  697. │ Copyright 1992-93 Stacy Smith ││              SYSOP - S/N 0000              │
  698. └───────────────────────────────┘└────────────────────────────────────────────┘
  699. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  700. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  701. ░░░░░░░░░░░░░░░░░░░░░░░┌────────────────────────────────┐░░░░░░░░░░░░░░░░░░░░░░
  702. ░░░░░░░░░░░░░░░░░░░░░░░│  A - Registration information  │░░░░░░░░░░░░░░░░░░░░░░
  703. ░░░░░░░░░░░░░░░░░░░░░░░│  B - General options           │░░░░░░░░░░░░░░░░░░░░░░
  704. ░░░░░░░░░░░░░░░░░░░░░░░│  C - Upload directories        │░░░░░░░░░░░░░░░░░░░░░░
  705. ░░░░░░░░░░░░░░░░░░░░░░░│  D - Archiving options         │░░░░░░░░░░░░░░░░░░░░░░
  706. ░░░░░░░░░░░░░░░░░░░░░░░│  E - Archivers                 │░░░░░░░░░░░░░░░░░░░░░░
  707. ░░░░░░░░░░░░░░░░░░░░░░░│  F - Virus/file testers        │░░░░░░░░░░░░░░░░░░░░░░
  708. ░░░░░░░░░░░░░░░░░░░░░░░│  G - Duplicate checking        │░░░░░░░░░░░░░░░░░░░░░░
  709. ░░░░░░░░░░░░░░░░░░░░░░░│  H - Age checking              │░░░░░░░░░░░░░░░░░░░░░░
  710. ░░░░░░░░░░░░░░░░░░░░░░░│  I - BBS ad processing         │░░░░░░░░░░░░░░░░░░░░░░
  711. ░░░░░░░░░░░░░░░░░░░░░░░│  J - GIF file testing          │░░░░░░░░░░░░░░░░░░░░░░
  712. ░░░░░░░░░░░░░░░░░░░░░░░│  K - Description processing    │░░░░░░░░░░░░░░░░░░░░░░
  713. ░░░░░░░░░░░░░░░░░░░░░░░│  L - Online testing            │░░░░░░░░░░░░░░░░░░░░░░
  714. ░░░░░░░░░░░░░░░░░░░░░░░│  M - Special-case files        │░░░░░░░░░░░░░░░░░░░░░░
  715. ░░░░░░░░░░░░░░░░░░░░░░░│  N - Init process data file    │░░░░░░░░░░░░░░░░░░░░░░
  716. ░░░░░░░░░░░░░░░░░░░░░░░└────────────────────────────────┘░░░░░░░░░░░░░░░░░░░░░░
  717. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  718. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  719. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  720.  
  721. Using the up and down arrow keys, you can select any of the options. A shortcut
  722. is to type the letter preceding the option you wish to edit. If you press your
  723. escape key (ESC), the following pop-up question box will appear:
  724.  
  725.     ┌─────────────────────────────────────────────────────────────────┐
  726.     │  Do you wish to save the ULP configuration file (Y/N or Esc)?   │
  727.     └─────────────────────────────────────────────────────────────────┘
  728.  
  729. To save any edits you made to the data to the disk configuration file, type
  730. "Y", otherwise type "N" or press the ESC again. Note that, with the exception
  731. of the upload directory configuration information, no data is saved until you
  732. do so when exiting ULPSM.
  733.  
  734. A - REGISTRATION INFORMATION
  735. ────────────────────────────
  736. When selected, the following pop-up box will appear. By using the up and down
  737. arrow keys, you can move the cursor to the desired field to be edited.
  738.  
  739.     ┌───────────────────────────────────────────────────────────────┐
  740.     │  Sysop name         SYSOP                                     │
  741.     │  BBS name           UNREGISTERED                              │
  742.     │  Registration code  0000000000                                │
  743.     └───────────────────────────────────── [F10] Keep  [ESC] Abort ─┘
  744.  
  745. Sysop name - Enter EXACTLY as provided to you on your registration letter. If
  746.     this is an unregistered version, leave the default of SYSOP. Note that this
  747.     field is case-sensitive!
  748. BBS name - Enter EXACTLY as provided to you on your registration letter. If
  749.     this is an unregistered version, leave the default of "UNREGISTERED". This
  750.     field is also case-sensitive!
  751. Registration code - Enter EXACTLY as provided to you on your registration
  752.     letter. If this is an unregistered version, leave the default of
  753.     "0000000000". This is also case-sensitive...you get the picture by now...
  754.  
  755. After editing the fields, press F10 to keep the edits, or press ESC to abort
  756. the changes. In either instance, you will be returned to the main menu after
  757. the data has been automatically checked for errors. Any errors detected in the
  758. data will generate a pop-up error window that describes the error.
  759.  
  760. B - GENERAL OPTIONS
  761. ───────────────────
  762. When selected, the following pop-up box will appear. By using the up and down
  763. arrow keys, you can move the cursor to the desired field to be edited.
  764.  
  765.     ┌─────────────────────────────────────────────────────────┐
  766.     │  Error disposition  (Keep/Delete/Rename)  R             │
  767.     │  Virus disposition  (Keep/Delete/Rename)  R             │
  768.     │  Work subdirectory      D:\WORK\                        │
  769.     │  Disk log file          C:\ULP\ULP.LOG                  │
  770.     │  Disk logging mode  (Terse/Verbose)  V                  │
  771.     │  Disk read buffer size  (K)          4                  │
  772.     │  Swapping (None/Ems/Xms/Disk/Auto)   A                  │
  773.     │  Internal file deletion  (Yes/No)    Y                  │
  774.     │  Update DOWNLOAD.TXT file  (Yes/No)  Y                  │
  775.     │  DOWNLOAD.TXT file      C:\PCB\MAIN\DOWNLOAD.TXT        │
  776.     │  Privileged users list  C:\ULP\PRIVUSER.LST             │
  777.     │  File viewing utility   LIST @FILE@                     │
  778.     └─────────────────────────────── [F10] Keep  [ESC] Abort ─┘
  779.  
  780. Error Disposition - This defines how ULP dispositions archives found to have an
  781.     error other than a file check failure. These kind of errors take the form
  782.     of ZIP CRCs, duplication, age, etc., and are not potentially system-
  783.     damaging. Under some conditions, these archives can be restored. If you
  784.     want ULP to delete the failed archive and description, enter "D"; if you
  785.     want ULP to rename the archive to a error extension, enter "R". If, for
  786.     some reason, you wish to keep the files without renaming, enter "K".
  787. Virus Disposition - This defines how ULP dispositions archives that fail a file
  788.     check, such as a virus scan. These errors are potentially system-damaging.
  789.     If you want ULP to delete the failed archive and description, enter "D"; if
  790.     you want ULP to rename the archive to a .CHK extension, enter "R". If you
  791.     wish to keep the defective files without renaming, enter "K".
  792. Work subdirectory - If you want ULP, ULPTEST or ULPDB to use a specific
  793.     subdirectory for storage while processing, enter the full pathname
  794.     (including the trailing backslash; ULPSM will add it if necessary.). The
  795.     drive letter MUST be included. If this directory does not exist at runtime,
  796.     the ULP programs will attempt to create it. This can be set to a RAM disk
  797.     for greater speed. ULP will check the drive specified for at least 5 times
  798.     the archive size before attempting to decompress the archive. If you do not
  799.     desire to use a specific directory, leave it blank (the ULP programs will
  800.     extract on the drive from which it was executed). ULP will also accept an
  801.     environment variable defined using the '%VARIABLE%' convention. Note that
  802.     the environment variable must conform to the rules (trailing backslash,
  803.     path length, etc.).
  804. Disk log file - All of the ULP programs will write process and error
  805.     information to a log file, if desired. This is the path/filename of the log
  806.     file for ULP to record its activities. Leave it blank if you don't want any
  807.     disk logging.
  808. Disk logging mode - If you want ULP and ULPTEST to record statistics for each
  809.     archive processed to the log file (verbose mode), enter "V". If you only
  810.     want errors and disposition information (terse mode), logged to disk, enter
  811.     "T". Verbose mode will quickly produce a large log file, but gives much
  812.     more insight into what ULP is doing and why a particular upload failed.
  813. Disk read buffer size - The size of the disk I/O buffer you wish to allocate in
  814.     kilobytes (valid values are between 2K bytes and 16K bytes). Optimal
  815.     performance is obtained with a value that is a multiple of 2K bytes, since
  816.     this is the size of a typical hard disk cluster. 4K seems to be a good
  817.     number for me, although a larger size may improve performance a little. If
  818.     you find yourself running out of memory when executing archivers or file
  819.     checking programs, reduce this number to increase your available memory.
  820. Swapping - If you wish the ULP programs to swap themselves out of memory prior
  821.     to executing external programs, set this parameter to the type of swapping
  822.     desired (E for EMS, X for XMS, D for disk and A for automatic swap device
  823.     selection). If you do not want this feature, enter "N".  This feature will
  824.     be of most benefit to users using ARJ to compress archives, networked
  825.     systems and small DESQview windows.  Use this feature ONLY if you have a
  826.     memory crunch.
  827. Internal file deletion - If the ULP programs are to delete the extracted files
  828.     themselves, versus using DOS, set this parameter to "Y". If not, enter "N".
  829.     In some cases, letting DOS do the work is faster, but foreign language
  830.     implementations of DOS may prevent this ability, since they do not all use
  831.     "Y" as the acceptance character.
  832. Update DOWNLOAD.TXT file - If ULP is to scan your DOWNLOAD.TXT file and update
  833.     the file extension of the upload to reflect the correct archiving method
  834.     used, enter "Y", otherwise enter "N". This feature will allow utilities
  835.     that scan DOWNLOAD.TXT for file information to reflect correct information.
  836.     If you are using a utility that creates an independent database from the
  837.     DOWNLOAD.TXT file, such as PCBFX version 2.x, be sure ULP.EXE is run in the
  838.     event BEFORE that utility so the independent database reflects the changes
  839.     that ULP makes to DOWNLOAD.TXT.
  840. DOWNLOAD.TXT file - The full path and filename for the DOWNLOAD.TXT file. This
  841.     field is necessary only if the "Update DOWNLOAD.TXT file" is set to "Y".
  842. Privileged user list - ULP can use an ASCII text file to disable duplication
  843.     and age failures if the user's name is listed in this file. If you wish to
  844.     use this function, enter the full path and filename for the list file,
  845.     otherwise, leave it blank. The format of the file is a single name
  846.     per line; case is not important.
  847. File viewing utility - The command line for an ASCII file viewing (or editing)
  848.     utility, such as Vernon Buerg's venerable LIST utility. This will be called
  849.     by ULPDB to facilitate viewing of an archive information file generated for
  850.     the purposes of archive review. Place the @FILE@ variable (all caps) where
  851.     the filename is to be entered on the utility's command line.
  852.  
  853. After editing the fields, press F10 to keep the edits, or press ESC to abort
  854. the changes. In either instance, you will be returned to the main menu after
  855. the data has been automatically checked for errors.
  856.  
  857. C - UPLOAD DIRECTORIES
  858. ──────────────────────
  859. When selected, the following pop-up box will appear. By using the up and down
  860. arrow keys, you can move the cursor to the desired field to be edited.
  861.  
  862.     ┌────────────────────────────────────────────────────────────────┐
  863.     │  Upload directory config file  C:\ULP\ULPDIR.CFG               │
  864.     │  Upload directory definitions page number  (1-8)  1            │
  865.     └───────────────────────────────────────────── [Enter] Continue ─┘
  866.  
  867. Upload directory config file - The filename of the upload directory
  868.     configuration file for ULP. This file is automatically created by ULPSM.EXE
  869.     from data entered in the following screen(s), and must be defined for ULP
  870.     to operate.
  871. Upload directory definitions page number - The editing of the upload
  872.     directories is broken into 8 pages, with 3 directories per screen. You can
  873.     configure a total of 24 directories to be processed by ULP (this was an
  874.     arbitrarily-chosen limit, and can be changed if desired). Enter the number
  875.     of the page you wish to edit.
  876.  
  877. After editing the fields, press ENTER to continue. The following pop-up box
  878. will appear, displaying the page requested:
  879.  
  880.     ┌─────────────────────────────────────────────────────────────────────────┐
  881.     │  Source directory path                  C:\PRIVATE1\                    │
  882.     │  Source directory list file             C:\PCB\GEN\PRIVDIR1             │
  883.     │  Number of header lines in source list  1                               │
  884.     │  Destination directory path             C:\PUBLIC1\                     │
  885.     │  Destination directory list file        C:\PCB\GEN\PUBLDIR1             │
  886.     │                                                                         │
  887.     │  Source directory path                  C:\PUBLIC2\                     │
  888.     │  Source directory list file             C:\PCB\GEN\PUBLDIR2             │
  889.     │  Number of header lines in source list  1                               │
  890.     │  Destination directory path                                             │
  891.     │  Destination directory list file                                        │
  892.     │                                                                         │
  893.     │  Source directory path                                                  │
  894.     │  Source directory list file                                             │
  895.     │  Number of header lines in source list  0                               │
  896.     │  Destination directory path                                             │
  897.     │  Destination directory list file                                        │
  898.     └─ Page 1 of 8 ───────────────────────────────── [F10] Save  [ESC] Abort ─┘
  899.  
  900. Source directory path - The directory where the uploads are placed by PCBoard.
  901.     This must include the trailing backslash, ULPSM will add it if necessary.
  902.     If you have "make all uploads private" in PCBSETUP set to "Y", this will be
  903.     your private upload subdirectory; if set to "N", this will be your public
  904.     upload subdirectory. This path must match EXACTLY the appropriate path in
  905.     PCBSETUP (e.g. don't have one named 'C:\DIR\' and the other just '\DIR\').
  906. Source directory list file - The upload directory list file that corresponds to
  907.     the subdirectory defined in "Source directory path" containing the archive
  908.     descriptions.
  909. Number of header lines in source list - The number of lines to ignore at the
  910.     beginning of the source directory list file (for headers, detachable header
  911.     filespecs, etc.)
  912. Destination directory path - The directory where the uploads are to be placed
  913.     by ULP after processing. This must include the trailing backslash, ULPSM
  914.     will add it if necessary. If you have "make all uploads private" in
  915.     PCBSETUP set to "Y", this will be your public upload subdirectory. If you
  916.     have "make all uploads private" set to "N", leave this field blank.
  917. Destination directory list file - The upload directory list file that
  918.     corresponds to the subdirectory defined in "Destination directory path"
  919.     containing the archive descriptions, or blank if "Destination directory
  920.     path" was left blank.
  921.  
  922. After editing the fields on this page, press F10 to save the edits to the
  923. upload directory configuration file on disk, or press ESC to abort the changes.
  924.  
  925. D - ARCHIVING OPTIONS
  926. ─────────────────────
  927. When selected, the following pop-up box will appear. By using the up and down
  928. arrow keys, you can move the cursor to the desired field to be edited.
  929.  
  930.     ┌─────────────────────────────────────────────────┐
  931.     │  Convert archives  (Yes/No)                  Y  │
  932.     │  Convert nested archives  (Yes/No)           N  │
  933.     │  Convert self-extracting archives  (Yes/No)  N  │
  934.     │  Convert -AV stamped ZIP archives  (Yes/No)  N  │
  935.     │  Convert secured ARJ archives  (Yes/No)      N  │
  936.     └─────────────────────── [F10] Keep  [ESC] Abort ─┘
  937.  
  938. Convert archives - If you want ULP to convert the archive to a default
  939.     archiving format of your choice, enter "Y"; if not, enter "N". This only
  940.     affects the 'root' level of the archive. This flag has no affect on the
  941.     conversion of internal, nested archives.
  942. Convert nested archives - If you want ULP to convert any internal archives
  943.     found inside the archive to your default archiving format, type "Y";
  944.     otherwise, type "N", and they will be rearchived using the original
  945.     archiving method (using the original extension, even if it isn't that
  946.     archiver's default extension). The benefit of converting nested archives is
  947.     that it may save some disk space; on the down side, it will potentially
  948.     break automatic installation programs/batch files that may be contained
  949.     within the archive that expect a certain format nested file.
  950. Convert self-extracting archives - If you want ULP to convert a self-extracting
  951.     (SFX) archive to your default archiving format, type "Y"; if not, type "N".
  952.     If NO is selected, the SFX archive will be processed, and then left alone
  953.     if it passes (NOT re-archived!). The reasoning for this is the LHA
  954.     autostart batch files and other similar features; they are usually used for
  955.     novice users and for automatic installation. By converting SFX archives,
  956.     this may save some disk space, but can cause inconveniences. For example,
  957.     if you don't have PKZnnn.EXE on your BBS, a novice user has no way of
  958.     obtaining the PKZIP utilities from your BBS. If there is a BBS ad in a SFX
  959.     archive, and this flag is set to "N", the ad will remain in the archive.
  960.     Can't be helped at the moment...
  961. Convert -AV stamped ZIP archives - If you want ULP to convert ZIP archives with
  962.     authenticity verification stamps (-AV) to your default format, enter "Y".
  963.     If you set this flag to "N", then the original archive will be retained
  964.     after processing. Note that if there is a BBS ad in a -AV stamped archive,
  965.     and this flag is set to "N", the ad will remain in the archive.
  966. Convert secured ARJ archives - If you want ULP to convert ARJ archives with
  967.     security envelopes (similar to a ZIP -AV), then set this to "Y". If you set
  968.     this flag to "N", then the original archive will be retained. If there is a
  969.     BBS ad in a secured ARJ archive, and this flag is set to "N", the ad will
  970.     remain in the archive.
  971.  
  972. After editing the fields, press F10 to keep the edits, or press ESC to abort
  973. the changes.
  974.  
  975. E - ARCHIVERS
  976. ─────────────
  977. When selected, the following pop-up box will appear:
  978.  
  979.     ┌──────────────────────────────────────────────┐
  980.     │  Archiver definitions page number  (1-3)  1  │
  981.     └─────────────────────────── [Enter] Continue ─┘
  982.  
  983. Archiver definitions page number - The editing of the archiver information is
  984.     broken into 3 pages, with 3 archivers per screen. You can configure a total
  985.     of 9 archivers to be utilized by ULP (this was an arbitrarily-chosen limit,
  986.     and can be changed if desired). Enter the number of the page you wish to
  987.     edit.
  988.  
  989. After editing the field, press ENTER to continue. The following pop-up box will
  990. appear, displaying the page requested:
  991.  
  992.     ┌─────────────────────────────────────────────────────────────────────────┐
  993.     │ Extension  ARC    Primary format (Yes/No)  N   Successful errorlevel  0 │
  994.     │ Pack     c:\util\pkpak -a @ARC@ @FILE@                                  │
  995.     │ Unpack   c:\util\pkunpak -r @ARC@                                       │
  996.     │ Test     c:\util\pkunpak -t @ARC@                                       │
  997.     │ Comment                                                                 │
  998.     │                                                                         │
  999.     │ Extension  ARJ    Primary format (Yes/No)  N   Successful errorlevel  0 │
  1000.     │ Pack     c:\util\arj a -e -jm -m1 @ARC@ @FILE@                          │
  1001.     │ Unpack   c:\util\arj e -y @ARC@                                         │
  1002.     │ Test     c:\util\arj t @ARC@                                            │
  1003.     │ Comment  c:\util\arj c -zc:\ulp\comment.txt @ARC@                       │
  1004.     │                                                                         │
  1005.     │ Extension  HYP    Primary format (Yes/No)  N   Successful errorlevel  0 │
  1006.     │ Pack     c:\util\hyper -a @ARC@ @FILE@                                  │
  1007.     │ Unpack   c:\util\hyper -x @ARC@                                         │
  1008.     │ Test     c:\util\hyper -v @ARC@                                         │
  1009.     │ Comment                                                                 │
  1010.     └─ Page 1 of 3 ───────────────────────────────── [F10] Keep  [ESC] Abort ─┘
  1011.  
  1012. Extension - The default extension for this particular archiving format. ULP is
  1013.     capable of automatically detecting ARC, ARJ, HYP, LZH, PAK, SQZ, ZIP and
  1014.     ZOO archives, and will process them regardless of extension. If you add
  1015.     another archiver that is not automatically detected by ULP, it will be
  1016.     detected by the configured extension only.
  1017. Primary format - If this is the default archiving format you use on your BBS,
  1018.     type "Y"; if not, type "N". There can be only one default archiver, and
  1019.     in the event more than one flag is set, ULPSM will take the first one in
  1020.     the list with the flag set as the default.
  1021. Successful errorlevel - The errorlevel that the archiver returns upon a
  1022.     successful execution. This information should be available in the program's
  1023.     documentation. This is how ULP determines if an archiver is functioning
  1024.     properly, so any archiver configured must return errorlevels that are
  1025.     different for success than errors.
  1026. Pack - The command line to pack archives, including all command-line switches
  1027.     desired. Place the variable @ARC@ (all caps) where the filename is to be
  1028.     inserted in the command line and @FILE@ (also all caps) where the filespec
  1029.     is to be inserted. This cannot be a batch file, nor is DOS re-direction
  1030.     allowed. If you do not explicitly define the path to your archiver(s), it
  1031.     must in a directory included in the DOS 'PATH' environment variable.
  1032. Unpack - The command line to unpack archives, including all command-line
  1033.     switches desired. Place the variable @ARC@ where the filename is to be
  1034.     inserted in the command line. This cannot be a batch file, nor is DOS
  1035.     re-direction allowed.
  1036. Test - The command line for the archiver to test archive integrity, including
  1037.     all command-line switches desired. Place the variable @ARC@ where the
  1038.     filename is to be inserted in the command line. This cannot be a batch
  1039.     file, nor is DOS re-direction allowed.
  1040. Comment - The command line to comment archives. Place the variable @ARC@ where
  1041.     the filename is to be inserted in the command line. If the archiver does
  1042.     not support comments, or if you do not wish to add comments, leave the
  1043.     field blank. This cannot be a batch file, but DOS redirection is permitted
  1044.     to pipe a file into the archiver (PKZIP, for example).
  1045.  
  1046. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1047. the changes.
  1048.  
  1049. F - VIRUS/FILE TESTERS
  1050. ──────────────────────
  1051. When selected, the following pop-up box will appear. By using the up and down
  1052. arrow keys, you can move the cursor to the desired field to be edited.
  1053.  
  1054.     ┌─────────────────────────────────────────────────────────────────────────┐
  1055.     │  Command 1  h:\util\scan /a /nomem /nopause @FILE@                      │
  1056.     │  Successful errorlevel  0                                               │
  1057.     │                                                                         │
  1058.     │  Command 2                                                              │
  1059.     │  Successful errorlevel  0                                               │
  1060.     │                                                                         │
  1061.     │  Command 3                                                              │
  1062.     │  Successful errorlevel  0                                               │
  1063.     └─────────────────────────────────────────────── [F10] Keep  [ESC] Abort ─┘
  1064.  
  1065. Command n - The command line to execute for the file checker, including all
  1066.     command-line switches. Place the variable @FILE@ where the filespec is to
  1067.     be placed on the command line. This cannot be a batch file, nor is DOS
  1068.     re-direction allowed. Any kind of file checker may be used, such as a virus
  1069.     checker or a BBS ads checker, if desired; they will be executed in the
  1070.     order defined in this screen. If you do not explicitly define the path to
  1071.     your file checking program(s), it must in a directory included in the DOS
  1072.     PATH environment variable. Note that if you are running a network, the use
  1073.     of network-specific scanners may be necessary (e.g. McAfee's SCAN and
  1074.     NETSCAN).
  1075. Successful errorlevel - The errorlevel that the file checker returns upon a
  1076.     successful execution. This information should be available in the program's
  1077.     documentation. This is how ULP determines if the file checker detected a
  1078.     defect, so any file checker configured must return errorlevels that are
  1079.     different for success than errors.
  1080.  
  1081. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1082. the changes.
  1083.  
  1084. G - DUPLICATE CHECKING
  1085. ──────────────────────
  1086. When selected, the following pop-up box will appear. By using the up and down
  1087. arrow keys, you can move the cursor to the desired field to be edited.
  1088.  
  1089.     ┌────────────────────────────────────────────────────────────────────────┐
  1090.     │  Duplication checking  (None/Internal/Zdcs)  I                         │
  1091.     │  Total duplication limit  (%)                55                        │
  1092.     │  Executable dupe limit  (%)                  80                        │
  1093.     │  Duplication database        C:\ULP\DATABASE.DB                        │
  1094.     │  Duplication database index  C:\ULP\DATABASE.IDX                       │
  1095.     │  ZDCS subdirectory                                                     │
  1096.     └────────────────────────────────────────────── [F10] Keep  [ESC] Abort ─┘
  1097.  
  1098. Duplication checking - If you want ULP to use its internal duplication system
  1099.     checking, type "I". If you want to use the ZDCS external duplication system
  1100.     by Mike Cocke (with the required ZCDSULP interface program), enter "Z". If
  1101.     you desire no duplication checking at all, type "N".
  1102. Total duplication limit - The minimum percentage of duplication allowed for a
  1103.     file to pass. Anything SMALLER will pass regardless of the executable
  1104.     duplication limit. I would suggest this number be set to around 55, as some
  1105.     program authors don't modify every file, especially with maintenance
  1106.     releases. This limit is implemented for both ULP's internal and ZDCS
  1107.     duplication systems.
  1108. Executable dupe limit - The maximum percentage of duplication allowed for
  1109.     executable files and overlays to pass. This number should be higher than
  1110.     the total duplication limit; I would recommend about 80. This will catch
  1111.     archives that are duplicates, but someone has changed enough files to
  1112.     normally pass it when uploaded (such as configs, high score files, etc.).
  1113.     This will also pass files where the author has changed nothing but the
  1114.     executables; they would have failed before. Executables are determined
  1115.     solely by extension; any file with one of the following extensions will be
  1116.     counted as an executable: EXE, COM, SYS, OVL, OVR, DLL. This limit is also
  1117.     implemented for both ULP's internal and ZDCS duplication systems.
  1118. Duplication database - The path and name for the duplication database file.
  1119.     It's a good idea to keep the database and index file together, just to make
  1120.     things easier. This file is used for ULP's internal duplication system
  1121.     only.
  1122. Duplication database index - The path and name for the duplication database
  1123.     file index. This file is also used for ULP's internal duplication system
  1124.     only.
  1125. ZDCS subdirectory - The complete path for your ZDCS files (used only for the
  1126.     ZDCS duplication system). You must include the trailing backslash and drive
  1127.     letter; ULPSM will add it if necessary.
  1128.  
  1129. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1130. the changes.
  1131.  
  1132. H - AGE CHECKING
  1133. ────────────────
  1134. When selected, the following pop-up box will appear. By using the up and down
  1135. arrow keys, you can move the cursor to the desired field to be edited.
  1136.  
  1137.     ┌──────────────────────────────────────────┐
  1138.     │  Age checking  (None/Average/neWest)  A  │
  1139.     │  Minimum age  (months)  48               │
  1140.     └──────────────── [F10] Keep  [ESC] Abort ─┘
  1141.  
  1142. Age checking - If you want ULP to fail an archive based on the average age of
  1143.     the files contained within, enter "A". If you want rejection based upon the
  1144.     age of the newest file, enter "W". Otherwise, if you don't want age
  1145.     checking, enter "N".
  1146. Minimum average age - The maximum average age in months, that you will accept
  1147.     for an upload.
  1148.  
  1149. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1150. the changes.
  1151.  
  1152. I - BBS AD PROCESSING
  1153. ─────────────────────
  1154. When selected, the following pop-up box will appear. By using the up and down
  1155. arrow keys, you can move the cursor to the desired field to be edited.
  1156.  
  1157.     ┌─────────────────────────────────────────────────────────────┐
  1158.     │  Remove BBS ads  (Yes/No)   Y                               │
  1159.     │  BBS ad detection database  C:\ULP\ULPADS.DB                │
  1160.     │  BBS ad file to insert                                      │
  1161.     └─────────────────────────────────── [F10] Keep  [ESC] Abort ─┘
  1162.  
  1163. Remove BBS ads - If you want ULP to remove known BBS ads from new uploads
  1164.     during processing, type "Y"; if not, type "N". Only ULP.EXE and ULPTEST
  1165.     SLOW mode removes BBS ads; ULPTEST FAST and NORMAL modes do not, but the
  1166.     upload will have any BBS ads removed later in the event.
  1167. BBS ad detection database - The path and name for the BBS ads database. This
  1168.     database can be updated by the sysop by using the ULPADS utility (see
  1169.     section 11 of this document), freeing the sysop from being reliant on me to
  1170.     maintain the ads database. If you find a large number of new BBS ad files,
  1171.     please upload them to my board for inclusion into my master ads database.
  1172. BBS ad file to insert - The path and filename for your BBS ad to be added to
  1173.     each and every archive processed by ULP. If you do not wish to insert a BBS
  1174.     ad, leave the field blank. Note that you must provide a drive and path, or
  1175.     it will not be copied. I STRONGLY recommend against them; BBS ads are
  1176.     aggravating to other sysops, so please be considerate and use the ARJ or
  1177.     ZIP comment instead. BBS ad files are the scourge of the BBS world.
  1178.  
  1179. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1180. the changes.
  1181.  
  1182. J - GIF FILE CHECKING
  1183. ─────────────────────
  1184. When selected, the following pop-up box will appear. By using the up and down
  1185. arrow keys, you can move the cursor to the desired field to be edited.
  1186.  
  1187. * NOTE: If you desire no GIF file testing by ULP, set all minimum image
  1188.         parameters (width, height and colors) to 0 and blank out the GIF file
  1189.         tester command line.
  1190.  
  1191.     ┌─────────────────────────────────────────────────────────────────────────┐
  1192.     │  Minimum image width  (columns)  320                                    │
  1193.     │  Minimum image height  (rows)    200                                    │
  1194.     │  Minimum number of colors        16                                     │
  1195.     │  Keep GIFLITE'd files  (Yes/No)  N                                      │
  1196.     │  Command  giftest /b:0 /l:c:\ulp\giftest.log @FILE@                     │
  1197.     │  Successful errorlevel  0                                               │
  1198.     └─────────────────────────────────────────────── [F10] Keep  [ESC] Abort ─┘
  1199.  
  1200. Minimum image width - If ULP is to reject GIF files based upon image width,
  1201.     enter the minimum acceptable width in pixels. If no width limit is desired,
  1202.     set it to zero.
  1203. Minimum image height - If ULP is to reject GIF files based upon image height,
  1204.     enter the minimum acceptable height in pixels. If no height limit is
  1205.     desired, set it to zero.
  1206. Minimum number of colors - If ULP is to reject GIF files based upon the number
  1207.     of colors in the image, enter the minimum acceptable number of colors. If
  1208.     no color limit is desired, set it to zero.
  1209. Keep GIFLITE'd files - If ULP is to keep uploaded GIF files if they have been
  1210.     compressed with GIFLITE, set this to "Y". If not, set it to "N". At this
  1211.     time, if you use GIFTEST, this parameter will have no effect; GIFLITE'd
  1212.     files will always be rejected. Accepting GIFLITE'd GIF files can compromise
  1213.     the duplication system due to its variable compression ratio! I strongly
  1214.     suggest you do not accept GIFLITE'd GIF files!
  1215. Command - The command line to execute for the GIF file checker, including all
  1216.     command-line switches. Place the variable @FILE@ where the filespec is to
  1217.     be placed on the command line. This cannot be a batch file, nor is DOS
  1218.     re-direction allowed.  If no GIF tester is desired, leave this field
  1219.     blank.
  1220. Successful errorlevel - The errorlevel that the GIF file checker returns upon a
  1221.     successful execution. This information should be available in the program's
  1222.     documentation. This is how ULP determines if the GIF file checker detected
  1223.     a defect in the GIF file, so the GIF file checker configured must return
  1224.     errorlevels that are different for success than errors.
  1225.  
  1226. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1227. the changes.
  1228.  
  1229. K - DESCRIPTION PROCESSING
  1230. ──────────────────────────
  1231. When selected, the following pop-up box will appear. By using the up and down
  1232. arrow keys, you can move the cursor to the desired field to be edited.
  1233.  
  1234.     ┌─────────────────────────────────────────────────────────────────────────┐
  1235.     │  Strip lost descriptions  (Yes/No)             N                        │
  1236.     │  Smart word wrap descriptions  (Yes/No)        Y                        │
  1237.     │  Strip high ASCII from descriptions  (Yes/No)  N                        │
  1238.     │  Insert internal description files  (Yes/No)   Y                        │
  1239.     │  Maximum number of description lines           10                       │
  1240.     │  Number of columns to indent secondary lines   32                       │
  1241.     │  Insert error description line  (Yes/No)       Y                        │
  1242.     │  Insert lack of description line  (Yes/No)     Y                        │
  1243.     │  Archive information line format                                        │
  1244.     │  (Files: @#@ Newest: @NEW@ Oldest: @OLD@)                               │
  1245.     │  GIF information line format                                            │
  1246.     │  (Resolution: @WID@x@HGT@x@COLOR@  Comp: @COMP@)                        │
  1247.     └─────────────────────────────────────────────── [F10] Keep  [ESC] Abort ─┘
  1248.  
  1249. Strip lost descriptions - If you want ULP to remove "lost" descriptions from
  1250.     the source listing that do not have a corresponding file in the source
  1251.     subdirectory, enter "Y", otherwise, type "N". This is an excellent tool for
  1252.     cleaning up stray descriptions after files have been deleted for some
  1253.     reason.
  1254. Smart word wrap descriptions - If you want ULP to word-wrap descriptions, enter
  1255.     "Y", otherwise, type "N". Due to it's smart word-wrapping, ULP checks for
  1256.     box-draw characters before word-wrapping.
  1257. Strip high ASCII from descriptions - If you want ULP to strip high ASCII and
  1258.     control characters from archive descriptions prior to insertion, enter "Y",
  1259.     otherwise, enter "N". When turned on, ULP will strip all illegal characters
  1260.     (per the FILE_ID.DIZ specification) from descriptions prior to insertion,
  1261.     leaving the text description intact.
  1262. Insert internal description files - ULP can extract and insert FILE_ID.DIZ and
  1263.     DESC.SDI internal description files into the directory list files. If you
  1264.     want ULP to insert internal description files, type "Y"; if not, type "N".
  1265.     Note that ULP gives priority to FILE_ID.DIZ in the event the same archive
  1266.     contains both a FILE_ID.DIZ and a DESC.SDI file.
  1267. Maximum number of description lines - When ULP is to insert internal
  1268.     description files, this is the maximum number of lines that ULP will insert
  1269.     from the description file. Although up to 60 lines can be inserted, Clark
  1270.     Development Company (the developer of PCBoard and FILE_ID.DIZ) has defined
  1271.     that a FILE_ID.DIZ file should have no more than 10 lines.
  1272. Number of columns to indent secondary lines - The column where the '|' marker
  1273.     goes in your directory listing setup for secondary description lines and
  1274.     information lines added by ULP. The standard PCBoard setup indents to
  1275.     column 32.
  1276. Insert error description line - If you want ULPTEST to add a canned line to the
  1277.     description of failed archives describing the failure, enter "Y",
  1278.     otherwise, type "N". Note that ULP.EXE will not add this line, nor will it
  1279.     strip this error line if the file is processed in override mode.
  1280. Insert lack of description line - If you want ULP.EXE to insert a canned "No
  1281.     description available" line for the description of any file that does not
  1282.     have any description associated with it, set this to "Y". If you wish for
  1283.     the file to remain in the source area without a description of any kind,
  1284.     set to "N".
  1285. Archive information line format - The format that you would like for the
  1286.     archive information line (do not include the '|' character or the following
  1287.     space; ULP will add those). If you do not wish to include an archive
  1288.     information line, blank this field out. This format is completely
  1289.     configurable by the user; any ASCII character can be used. To include
  1290.     specific information compiled by ULP, just add the variables. The legal
  1291.     variables must be in all caps, and are as follows:
  1292.         @#@     Number of files in the archive (and nested archives)
  1293.         @NEW@   Date of the newest file in the archive
  1294.         @OLD@   Date of the oldest file in the archive
  1295.         @BYTE@  The total number of bytes (uncompressed) in the archive
  1296.         @DATE@  Today's date
  1297.         @CR@    Inserts a line break for multiline capability
  1298. GIF information line format - The format that you would like for the GIF
  1299.     information line (again, do not include the '|' character or the space). If
  1300.     you do not wish to include a GIF information line, blank this field out.
  1301.     The legal variables are:
  1302.         @WID@    Horizontal resolution (number of columns)
  1303.         @HGT@    Vertical resolution (number of rows)
  1304.         @COLOR@  Number of colors in GIF
  1305.         @COMP@   Inserts "GIFLITE" or "None", depending upon compression
  1306.         @DATE@   Today's date
  1307.         @CR@     Inserts a line break for multiline capability
  1308.  
  1309. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1310. the changes.
  1311.  
  1312. L - ONLINE TESTING
  1313. ──────────────────
  1314. When selected, the following pop-up box will appear. By using the up and down
  1315. arrow keys, you can move the cursor to the desired field to be edited.
  1316.  
  1317.     ┌──────────────────────────────────────────────────────┐
  1318.     │  Default online test mode  (Fast/Normal/Slow)  S     │
  1319.     │  Maximum file size for slow mode  (K)          250   │
  1320.     │  Maximum file size for normal mode  (K)        500   │
  1321.     │  Generate remote user status screen  (Yes/No)  N     │
  1322.     │  Suppress ULP header in serial I/O  (Yes/No)   N     │
  1323.     └──────────────────────────── [F10] Keep  [ESC] Abort ─┘
  1324.  
  1325. Default online test mode - This defines the default mode that ULPTEST processes
  1326.     an archive. The default mode is the mode that ULPTEST *starts* in, and then
  1327.     is forced into the faster mode(s) by the limits defined.
  1328.     SLOW mode fully processes the archive, identical to the ULP event
  1329.         processing except that the archive formats are not converted. Note that
  1330.         archive conversion is not possible in SLOW mode due to limitations of
  1331.         PCBoard and the file will not be reprocessed by ULP.EXE in the event.
  1332.         Also note that you MUST make all uploads public for SLOW mode to work
  1333.         properly. This mode is intended to emulate the operation of other
  1334.         testers like EXZTest and Ziplab. Enter "S" to use this mode.
  1335.     NORMAL mode is a full *test*, except the archive is not repacked, saving a
  1336.         significant amount of the testing time for the online user. Enter "N"
  1337.         to use this mode of operation.
  1338.     FAST indicates a fast test in which the archive is scanned for archive
  1339.         integrity, duplicates, and age without unpacking the archive (ARJ and
  1340.         ZIP files only). If this mode is used, it should be held for later
  1341.         reprocessing by ULP.EXE so that it can be file-checked. Note that FAST
  1342.         mode can only 'see' one level deep in the archive. If you have a slow
  1343.         computer and/or hard disk, FAST mode would be preferable for your users
  1344.         when large archives are uploaded. Enter "F" to utilize this mode.
  1345. Maximum file size for slow mode - If SLOW mode is used, the archive's file size
  1346.     will first be compared against this limit (in kilobytes). If it is larger
  1347.     than this number of bytes (in kilobytes), it will be forced into NORMAL
  1348.     mode to speed the process and prevent wasting the user's online time.
  1349.     Entering 0 will disable this feature, resulting in SLOW mode being used at
  1350.     all times. If the default online test mode is set to NORMAL or FAST, this
  1351.     parameter has no effect.
  1352. Maximum file size for normal mode - If NORMAL mode is used (or has been forced
  1353.     due to an upload exceeding the slow mode size limit), the archive's file
  1354.     size will be compared against this limit (in kilobytes). If it is larger
  1355.     than this number of kilobytes, it will be forced into FAST mode to speed
  1356.     the process and prevent wasting the user's online time. Entering 0 will
  1357.     disable this feature, resulting in NORMAL mode being used at all times. If
  1358.     the default test mode is set to FAST, this parameter has no effect.
  1359. Generate online user status - If you want ULPTEST to output status information
  1360.     to the user on-line, set this flag to "Y"; if you do not want ULPTEST to
  1361.     output status information, enter "N". ULPTEST supports both direct
  1362.     interrupt-driven I/O (IRQs 2-7) and FOSSIL driver I/O.
  1363. Suppress ULP header in serial I/O - If you want ULPTEST to suppress the program
  1364.     header output to the user via the COM port (the program name, copyright
  1365.     notice, and registration information). This gives a seamless look for ULP
  1366.     into PCBoard. If this is desired, set this flag to "Y"; otherwise, set it
  1367.     to "N". This feature will work for registered users only!
  1368.  
  1369. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1370. the changes.
  1371.  
  1372. M - SPECIAL-CASE FILES
  1373. ──────────────────────
  1374. When selected, the following pop-up box will appear. By using the up and down
  1375. arrow keys, you can move the cursor to the desired field to be edited.
  1376.  
  1377.     ┌────────────────────────────────────────────────────┐
  1378.     │  Uncompressed extensions to process and compress   │
  1379.     │  DOC  TXT  COM                                     │
  1380.     │                                                    │
  1381.     │                                                    │
  1382.     │  Extensions to pass without processing             │
  1383.     │  CPT  SIT                                          │
  1384.     │                                                    │
  1385.     └────────────────────────── [F10] Keep  [ESC] Abort ─┘
  1386.  
  1387. Uncompressed extensions to process and compress - ULP can process selected
  1388.     uncompressed uploads, using this option. Up to 24 uncompressed file types
  1389.     can be specified by extension. Do not use any compression format extensions
  1390.     (ARJ, ZIP, etc.)! Any files that are uploaded with one of these extensions
  1391.     and could not be identified by signature will be file-checked,
  1392.     duplicate-checked, and compressed using your default archiving method (in
  1393.     the event). If you do not want to use this feature, simply blank all of the
  1394.     fields. It probably is not a good idea to have EXE as an extension to
  1395.     compress, since ULP is not able to detect ARC, HYP or ZOO self-extractors,
  1396.     and they would be packed again as an uncompressed archive.
  1397. Extensions to pass without processing - ULP can be forced to NOT process
  1398.     selected uploads, using this option. Up to 24 file types can be specified
  1399.     by extension. THESE FILES WILL BE AUTOMATICALLY PASSED WITHOUT ANY TESTING;
  1400.     be sure this is desired. This is intended for use with non-DOS uploads,
  1401.     such as the Unix Tar Z format, or Macintosh files. Since these files will
  1402.     NOT be tested for viruses, etc., note this fact to your users.
  1403.  
  1404. After editing the fields, press F10 to keep the edits, or press ESC to abort
  1405. the changes.
  1406.  
  1407. N - INIT PROCESS DATA FILE
  1408. ──────────────────────────
  1409. When selected, the following pop-up box will appear. By using the up and down
  1410. arrow keys, you can move the cursor to the desired field to be edited.
  1411.  
  1412.     ┌─────────────────────────────────────────────────────┐
  1413.     │  Process data file  C:\ULP\PROCESS.DAT              │
  1414.     │  Initialize process data file  N                    │
  1415.     └───────────────────────────── [F10] Go  [ESC] Abort ─┘
  1416.  
  1417. Process data file - The path and filename of the ULP process data file. This
  1418.     file contains information on previous ULP archive processing and is
  1419.     maintained automatically by ULP. This file must exist, or ULP will not
  1420.     operate.
  1421. Initialize process data file - If you want ULPSM to initialize the process data
  1422.     file when the F10 key (Go) is pressed, enter "Y", otherwise leave it as
  1423.     "N". Note that the process data file can also be initialized using ULP.EXE
  1424.     with the -I command line switch.
  1425.  
  1426. After editing the fields, press F10 to initialize the process data file and
  1427. keep the edits, or press ESC to abort the changes.
  1428.  
  1429.  
  1430. ┌────────────────────────┐
  1431. │  10. Manual Operation  │
  1432. └────────────────────────┘
  1433.  
  1434. While the ULP system is mostly automatic, there are occasions where some
  1435. operations may have to be done manually:
  1436.  
  1437. ULP:
  1438. ────
  1439. During the course of operation, ULP will rename archives that have been found
  1440. to be defective in some manner according to the following convention:
  1441.  
  1442.     .UNK    Unknown archive format
  1443.     .DOS    DOS reserved keyword found in archive
  1444.     .ERR    Error occurred while unpacking archive (archive integrity failure)
  1445.     .CHK    Error found while file checking archive file (virus, etc.)
  1446.     .DUP    Excessive duplicate files contained in archive
  1447.     .PCK    Error occurred while repacking archive file
  1448.     .AGE    Age limit exceeded by archive file
  1449.     .ENC    Encrypted file found in archive
  1450.     .BAD    Error found while testing GIF file
  1451.     .RES    Unacceptable GIF resolution
  1452.     .GLT    GIF compressed with GIFLITE
  1453.     .WRK    Unable to create work space for processing file
  1454.  
  1455. I would enter these extensions in your UPSEC file, as ULP will automatically
  1456. pass over any file with these extensions, presuming that they are defective
  1457. archives. Doing so will prevent a user from uploading a file with one of these
  1458. "reserved" extensions.
  1459.  
  1460. If you feel that these files are acceptable after reviewing them, you can force
  1461. them to be accepted by adding the command-line switch -O (for override) to the
  1462. ULP command line, e.g.:
  1463.  
  1464.     ULP -CULP.CFG -O
  1465.  
  1466. This will accept the archives regardless of duplication or age limits. It will
  1467. not override unpacking, packing, integrity and virus errors, however, for the
  1468. safety of your board and your users.
  1469.  
  1470. To initialize the ULP process database without using ULPSM, use the -I command
  1471. line switch:
  1472.  
  1473.     ULP -CULP.CFG -I
  1474.  
  1475. ULP will scan your source upload directories as configured and generate a
  1476. process data file. From then on, ULP will maintain this data file
  1477. automatically.
  1478.  
  1479. Three other command-line parameters are available in ULP. '-R' will retest all
  1480. archives found in the subdirectory passed to it. It will not use duplication
  1481. checking or age checking, nor will it repack the archive; it was installed to
  1482. allow the periodic retesting of archives for viruses, etc.:
  1483.  
  1484.     ULP -CULP.CFG -Rc:\temp\
  1485.  
  1486. Another, '-M' will retest and convert all archives found in the subdirectory
  1487. indicated; this can be used for mass archive conversion:
  1488.  
  1489.     ULP -CULP.CFG -Mc:\temp\
  1490.  
  1491. Note that the '-R' and '-M' switches cannot be used on a CD-ROM or other
  1492. write-protected media at this time.
  1493.  
  1494. ULPTEST:
  1495. ────────
  1496. If you wish to run ULPTEST without any drop files for comm port configuration
  1497. (e.g. PCBOARD.DAT, PCBOARD.SYS, etc.), add the '-L' command-line switch to
  1498. force comm I/O off and prevent the search for drop files. For example:
  1499.  
  1500.     ULPTEST -CULP.CFG -F%1 -M%2 -D%3 -N%PCBNODE% -L
  1501.  
  1502. * NOTE:  When ULPTEST is run in local mode, it is not possible to support
  1503.     privileged users, since the user's name can only be extracted from
  1504.     PCBOARD.SYS.
  1505.  
  1506. You should also pass the node number with the -N parameter, as ULPTEST does not
  1507. have access to the drop files where this information is available. Otherwise,
  1508. it will default to a node number of 9999.
  1509.  
  1510. ULPDB:
  1511. ──────
  1512. If a file has been failed for some reason, you can view the contents of the
  1513. archive using the -V command switch with ULPDB. This will scan the archive, and
  1514. generate a report of the results, which are indicative of why it failed. For
  1515. example:
  1516.  
  1517.     ULPDB -CULP.CFG -Vc:\privul\archive.dup
  1518.  
  1519. This will produce a report of the archive ARCHIVE.DUP located in the specified
  1520. path. This can be useful in determining if an archive that failed duplication
  1521. should be removed or should be accepted anyway, and similar reasons.
  1522.  
  1523. In addition, duplication databases can be merged using the -M command-line
  1524. option. In order to merge a second database into your main database:
  1525.  
  1526.     ULPDB -CULP.CFG -Msecond.db
  1527.  
  1528. where 'second.db' is the full path and filename for the second duplication
  1529. database to be merged with the main duplication database.  This will allow
  1530. pre-built databases to be constructed for CD-ROM disks for easy implementation.
  1531.  
  1532. Finally, database entries can be purged from the database using the file date
  1533. contained in the database record using the -P command switch:
  1534.  
  1535.     ULPDB -CULP.CFG -P60
  1536.  
  1537. where '60' is the maximum age (in months) for a file to remain in the database.
  1538. Removal is based upon the file date represented by the entry, NOT the date the
  1539. file entry was made into the database; these are not one and the same. In the
  1540. example above, all records for files older than 60 months (5 years) will be
  1541. removed from the database. As a protective measure, ULPDB will not perform a
  1542. purge if the value specified is less than 6 months.
  1543.  
  1544.  
  1545. ┌──────────────────────────┐
  1546. │  11. BBS Ads and ULPADS  │
  1547. └──────────────────────────┘
  1548.  
  1549. The ULP system includes a BBS ad removal feature based on CRC-32 calculation of
  1550. the file contents and other data. In this fashion, ULP can detect a known ad
  1551. file despite the file name and date.
  1552.  
  1553. In order for sysops to be able to 'keep up' with new ads produced by the weenie
  1554. sysops who insert the @!&*#%$ things, I have included a utility called ULPADS
  1555. that can scan a BBS ad file, and update the BBS ads with it's information.
  1556. Don't worry about duplication, as part of the process is to purge duplicate BBS
  1557. ad info. The command-line syntax for the ULPADS.EXE program is simply:
  1558.  
  1559.     ULPADS -Ddatabase.ad -Fbbs.ad
  1560.  
  1561. where 'database.ad' is the full path and filename for the BBS ads database, and
  1562. 'bbs.ad' is the path and filename for the BBS ad file to be added to the ads
  1563. database.
  1564.  
  1565. If you have a subdirectory full of BBS ads, the following batch file provided
  1566. by Ian Singer may be of help:
  1567.  
  1568.     rem DELADS.BAT
  1569.     rem this batch file written by Ian Singer 1 Jul 92 to take all
  1570.     rem the bbs ads in c:\ulp\ad and run them against the database
  1571.     rem in c:\ulp
  1572.     rem
  1573.     for %%f in (c:\ulp\ad\*.*) do ULPADS -Dc:\ulp\ulpads.db -F%%f
  1574.  
  1575. I would greatly appreciate your uploading of any new BBS ad files that you may
  1576. collect over time to my BBS so I can update the master listing that I include
  1577. with the ULP distribution archive. Please refer to the top of this document for
  1578. my BBS number.
  1579.  
  1580. The latest version of my BBS ads database is included in the distribution
  1581. archive. In order to add whatever new BBS ads information that may be
  1582. contained, you can merge the two BBS databases:
  1583.  
  1584.     ULPADS -Dmaster.db -Mother.db
  1585.  
  1586. where 'master.db' is the full path and filename for the master (your) BBS ads
  1587. database, and 'other.db' is the path and filename for the other BBS ads
  1588. datatbase to be merged with the master ads database.
  1589.  
  1590.  
  1591. ┌───────────────┐
  1592. │  12. Support  │
  1593. └───────────────┘
  1594.  
  1595. If you require support for ULP, I can be contacted by any of the following
  1596. means:
  1597.  
  1598.     ∙ Fidonet netmail (node:  1:151/106)
  1599.     ∙ Internet private mail to "stacy.smith@cencore.com"
  1600.     ∙ Fidonet, ILink and Intelec PCBoard and Sysops conferences
  1601.     ∙ My Support conference (#2 on my BBS) which is linked to the Salt Air
  1602.       (PCBoard home system) ULP Support conference, as well as the Intelec
  1603.       and SmartNet networks' ULP Support conferences
  1604.     ∙ The ILink ULP Support conference (separate and distinct, #3 on my BBS).
  1605.     ∙ The RIME ULP Support conference (separate and distinct)
  1606.  
  1607.  
  1608. ┌─────────────────────────┐
  1609. │  13. The Future of ULP  │
  1610. └─────────────────────────┘
  1611.  
  1612. ULP will be supported as long as I'm in the BBSing business (which will be
  1613. quite a while...once it's in your blood, you can never shake it <grin>). The
  1614. ULP system will be rapidly expanding it's features so it will be your first
  1615. choice in BBS upload processors. Some current plans:
  1616.  
  1617.       ∙ Add the ability to preprocess files prior to file checking them;
  1618.         for example, decompress executables that have been PKLite'd.
  1619.       ∙ Support other BBS software directory listing formats.
  1620.  
  1621. If you have any other suggestions, or want other archivers supported, please
  1622. contact me via Email, U.S. snail-mail or on my BBS at the number at the top of
  1623. this document.
  1624.  
  1625. Thanks for giving ULP a try!
  1626.  
  1627.  
  1628. ┌────────────────────────────────┐
  1629. │  Appendix A:  DOS Errorlevels  │
  1630. └────────────────────────────────┘
  1631.  
  1632. The errorlevels returned to DOS by the ULP system programs are consistent
  1633. among all of the programs (primarily with the error conditions); the following
  1634. is a list of the errorlevels than can be returned by the ULP programs, along
  1635. with which programs return the codes:
  1636.  
  1637.     0       Successful execution (ULPTEST, ULPDB, ULPADS)
  1638.     0       Successful execution, archives were processed (ULP)
  1639.     1       Successful execution, nothing to do (ULP)
  1640.     1       Unknown archive format (ULPTEST)
  1641.     2       DOS reserved keyword found in archive (ULPTEST)
  1642.     3       Error unpacking archive (archive integrity) (ULPTEST)
  1643.     4       Error file checking archive files (virus, etc.) (ULPTEST)
  1644.     5       Error duplicate checking archive files (ULPTEST)
  1645.     6       Error packing archive (ULPTEST)
  1646.     7       Age limit exceeded by archive files (ULPTEST)
  1647.     8       Encrypted file found in archive files (ULPTEST)
  1648.     9       Bad GIF file (ULPTEST)
  1649.     10      Unacceptable GIF resolution (ULPTEST)
  1650.     11      GIF compressed with GIFLITE (ULPTEST)
  1651.     12      Unable to create work space (ULPTEST)
  1652.     99      Help screen (executing a program with no or an insufficient number
  1653.             of arguments) (All)
  1654.     100     Could not close all open files (ULP, ULPTEST, ULPDB)
  1655.     101     Unknown command line parameter (All)
  1656.     102     Config file not found (All)
  1657.     103     Invalid configuration file format; use UPDATE.EXE to update (ULP,
  1658.             ULPTEST, ULPDB)
  1659.     104     Excessive number of command line parameters defined for
  1660.             file checker (maximum number of parameters is 13) (ULP, ULPTEST)
  1661.     105     Excessive number of command line parameters defined for archiver
  1662.             (max is 13) (ULP, ULPTEST, ULPDB)
  1663.     106     Excessive number of words defined in archive information line (max
  1664.             is 13) (ULP, ULPTEST)
  1665.     107     No primary archiver defined (ULP)
  1666.     108     Invalid disk buffer size (All)
  1667.     109     Upload directory list file(s) not found (ULP, ULPTEST)
  1668.     110     Unable to allocate heap memory (All)
  1669.     111     Unable to open or lock disk logging file (ULP, ULPTEST, ULPDB)
  1670.     112     Invalid registration code or attempting to run 286 or 386 versions
  1671.             without registering (ULP, ULPTEST, ULPDB)
  1672.     113     Unable to open/lock duplication database file(s) (ULP, ULPTEST,
  1673.             ULPDB)
  1674.     114     Unable to open BBS ads database file (ULP, ULPADS)
  1675.     115     Invalid filename provided by user on command-line (ULP, ULPTEST)
  1676.     116     Invalid path provided by user on command-line (ULP, ULPDB)
  1677.     117     Invalid or no node number (valid values are 1 to 256) (ULPTEST)
  1678.     118     Internal duplication database usage not enabled (configuration
  1679.             file parameter is set to 'N' or 'Z') (ULPDB)
  1680.     120     Invalid or old database format (All)
  1681.     121     Unable to process com port/invalid port parameter (ULPTEST)
  1682.     122     Unable to access PCBOARD.SYS (ULPTEST)
  1683.     123     Duplication database failed validation test (ULPDB)
  1684.     124     ZDCS/ULP interface program failure (ULPTEST)
  1685.     125     Unable to open privileged user list file (ULPTEST)
  1686.     126     Unable to determine comm port information (ULPTEST)
  1687.     200     Undefined error (internal to ULP system program(s))
  1688.  
  1689.  
  1690. ┌────────────────────────────────┐
  1691. │  Appendix B:  Acknowlegements  │
  1692. └────────────────────────────────┘
  1693.  
  1694. The problem of automatically recognizing duplicate files on large bulletin
  1695. board systems, independent of filename, was originally solved by Dr. Frederick
  1696. W. Kantor (founder of Information Mechanics and author of FWKCS(TM)
  1697. Contents_Signature System), who came up with the elegant solution of using both
  1698. the 32_bit CRC and the uncompressed file length together to make a
  1699. "contents_signature" for each file. Dr. Kantor's experimental data has shown a
  1700. typical pairwise error rate of less than one part in ten trillion using this
  1701. technology.
  1702.  
  1703.  
  1704. ┌─────────────────────────────────────┐
  1705. │  Appendix C:  Command Line Summary  │
  1706. └─────────────────────────────────────┘
  1707.  
  1708. ULP.EXE command-line syntax:
  1709.  
  1710.     ULP -Cd:\path\config.ext [-I] [-O] [-Rd:\path\] [-Md:\path\] [-D]
  1711.  
  1712.     -C  complete path and filename of the configuration file.
  1713.     -I  initialize the process data file. (Optional)
  1714.     -O  processes all archives, regardless of duplication or age limits,
  1715.         including previously processed archives with errors. (Optional)
  1716.     -R  retests all archives found in the directory specified for the
  1717.         purpose of re-checking archives for viruses, etc.. (Optional)
  1718.     -M  performs a mass conversion of all archives found in the directory
  1719.         specified to your default archive format. (Optional)
  1720.     -D  disables date stamp retention in mass convert mode. (Optional)
  1721.  
  1722.  
  1723. ULPTEST.EXE command-line syntax:
  1724.  
  1725.     ULPTEST -Cd:\path\cfg.ext -Fd:\path\archive.ext -Mmode [-Dd:\path\desc.ext]
  1726.         [-Pd:\path\] [-N#] [-L] [-B#] [-I#] [-Annn] [-Hmethod] [-X#] [-Gmode]
  1727.  
  1728.     -C  complete path and filename of the configuration file.
  1729.     -F  complete path and filename of the archive file to be tested.
  1730.     -M  processing mode [Upload/Test/Attach].
  1731.     -D  complete path and filename of the upload description file. (Optional)
  1732.     -P  complete path to the BBS starting directory. (Optional)
  1733.     -N  BBS node number executing ULPTEST. (Optional)
  1734.     -L  force local mode without comm I/O. (Optional)
  1735.     -B  COM port computer to modem (DTE) baud rate. (Optional)
  1736.     -I  COM port interrupt number. (Optional)
  1737.     -A  COM port base address (in hex). (Optional)
  1738.     -H  COM port handshaking method [Hardware/Software/Both]. (Optional)
  1739.     -X  FOSSIL port number. (Optional)
  1740.     -G  ANSI graphics toggle [Yes/No]. (Optional)
  1741.  
  1742.  
  1743. ULPDB.EXE command-line syntax:
  1744.  
  1745.     ULPDB -Cd:\path\config.ext [-Ad:\path\] [-U] [-Md:\path\database.ext]
  1746.         [-Id:\path\foreign.ext] [-S] [-P#] [-Vd:\path\archive.ext]
  1747.  
  1748.     -C  complete path and filename of the configuration file.
  1749.     -A  adds files located in the directory specified to the database
  1750.         file. List files supported by prefixing with a @ or !. (Optional)
  1751.     -U  forces unpacking of all archives when adding files. (Optional)
  1752.     -M  complete path and filename of a second database file to be merged
  1753.         with the master database file. (Optional)
  1754.     -I  complete path and filename of the foreign format database file to
  1755.         be imported into the master database file. (Optional)
  1756.     -S  compiles, sorts and indexes the database. (Optional)
  1757.     -F  forces a number of segements during compilation. (Optional)
  1758.     -P  age in months for purging database entries. (Optional)
  1759.     -V  complete path and filename of the archive to be viewed. (Optional)
  1760.  
  1761.  
  1762. ULPSM.EXE command-line syntax:
  1763.  
  1764.     ULPSM -Cd:\path\config.cfg [-Q]
  1765.  
  1766.     -C  complete path and filename of the configuration file.
  1767.     -Q  quiets beep when an error is detected. (Optional)
  1768.  
  1769.  
  1770. ULPADS.EXE command-line syntax:
  1771.  
  1772.     ULPADS -Dd:\path\database.ext [-Fd:\path\bbs.ad] [-Md:\path\database.ext]
  1773.  
  1774.     -D  complete path and filename of the master BBS ads database file.
  1775.     -F  complete path and filename of the ad file to be added to the BBS
  1776.         ads database. (Optional)
  1777.     -M  complete path and filename of a second BBS ad database to be merged
  1778.         with the master ads database. (Optional)
  1779.